return EXCRET_fault_fixed; /* successfully copied the mapping */
}
- if ( unlikely(!(regs->cs & 3)) )
+ if ( !GUEST_FAULT(regs) )
goto xen_fault;
- ti = d->thread.traps + 14;
+ ti = ed->thread.traps + 14;
tb->flags = TBF_EXCEPTION | TBF_EXCEPTION_ERRCODE | TBF_EXCEPTION_CR2;
tb->cr2 = addr;
tb->error_code = regs->error_code;
ALIGN
restore_all_guest:
- testb $TF_failsafe_return,DOMAIN_thread_flags(%ebx)
+ testb $TF_failsafe_return,EDOMAIN_thread_flags(%ebx)
jnz failsafe_callback
+ testl $X86_EFLAGS_VM,XREGS_eflags(%esp)
+ jnz restore_all_vm86
FLT1: movl XREGS_ds(%esp),%ds
FLT2: movl XREGS_es(%esp),%es
FLT3: movl XREGS_fs(%esp),%fs
/* {EIP, CS, EFLAGS, [ESP, SS]} */
/* %edx == trap_bounce, %ebx == task_struct */
/* %eax,%ecx are clobbered. %gs:%esi contain new XREGS_ss/XREGS_esp. */
- create_bounce_frame:
+ create_bounce_frame:
+ movl XREGS_eflags+4(%esp),%ecx
movb XREGS_cs+4(%esp),%cl
- testb $2,%cl
- jz 1f /* jump if returning to an existing ring-1 activation */
+ testl $(2|X86_EFLAGS_VM),%ecx
+ jz ring1 /* jump if returning to an existing ring-1 activation */
/* obtain ss/esp from TSS -- no current ring-1 activations */
- movl DOMAIN_processor(%ebx),%eax
+ movl EDOMAIN_processor(%ebx),%eax
/* next 4 lines multiply %eax by 8320, which is sizeof(tss_struct) */
movl %eax, %ecx
shll $7, %ecx
.long SYMBOL_NAME(do_grant_table_op) /* 20 */
.long SYMBOL_NAME(do_vm_assist)
.long SYMBOL_NAME(do_update_va_mapping_otherdomain)
+ .long SYMBOL_NAME(do_switch_vm86)
+ .long SYMBOL_NAME(do_boot_vcpu)
.rept NR_hypercalls-((.-hypercall_table)/4)
.long SYMBOL_NAME(do_ni_hypercall)
.endr